#!/usr/bin/python
#-*- coding: utf-8 -*-

import sqlite3
import sys
import os
#criado em 26/02/14

#####modificações faltando:########
#deletar uma linha, deletar um campo, deletar toda a tabela,
#corrigir exception,
#checar se arquivo existe, checar se tabela existe (antes de cur.execute)
#criar banco de dados na pasta data
###################################   

#criar banco de dados
def database_create(filename):
    
    database = None
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()
    
        cur.execute('DROP TABLE IF EXISTS registro ;')
        cur.execute('CREATE TABLE registro (id INTEGER PRIMARY KEY, '+
                    'nome TEXT UNIQUE NOT NULL, latitude TEXT, longitude TEXT, '+
                    'area_drenagem REAL, data TEXT) ;')
        database.commit()

        cur.execute('DROP TABLE IF EXISTS qualidade ;')
        cur.execute('CREATE TABLE qualidade (id INTEGER PRIMARY KEY, '+
                    'nome TEXT UNIQUE NOT NULL, ph TEXT, ar_temp TEXT, '+
                    'agua_temp TEXT, cond_eletrica TEXT, turbidez TEXT, '+
                    'o_dissolvido TEXT, solidos TEXT, coliformes TEXT, '+
                    'nitratos TEXT, coleta TEXT, profundidade TEXT);')
        database.commit()
        
    except Exception as e:
       database.rollback()
       raise e

    finally:
        if database:
            database.close()
            
#procedimento para ser usado por uma interface que edita todos os campos da aba registro
def database_insert_registro(filename, name, latitude, longitude, drainage_area,
                    data):

    database = None
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('INSERT INTO registro (nome, latitude, longitude, area_drenagem, data)'+
                    ' VALUES (?, ?, ?, ?, ?) ;', (name, latitude, longitude, drainage_area, data))
        database.commit()

    except Exception as e:
       database.rollback()
       raise e

    finally:
        if database:
            database.close()
    
#procedimento que edita os campos da aba qualidade da água
def database_insert_qualidade(filename, name, ph, ar_temp, agua_temp, cond_eletrica,
                              turbidez, o_dissolvido, solidos, coliformes, nitratos,
                              coleta, profundidade):

    database = None
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('INSERT INTO qualidade (nome, ph, ar_temp, agua_temp, cond_eletrica,'+
                    'turbidez, o_dissolvido, solidos, coliformes, nitratos, coleta, '+
                    'profundidade) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ;',( name, ph, ar_temp,
                    agua_temp, cond_eletrica, turbidez, o_dissolvido, solidos, coliformes,
                    nitratos, coleta, profundidade))

        database.commit()
        
    except Exception as e:
       database.rollback()
       raise e

    finally:
        if database:
            database.close()
            
#procedimento para criar uma linha na tabela(considerando que 'nome' é o único NOT NULL)
def database_create_row(filename, table, name):
    database = None
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('INSERT INTO '+table+' (nome) VALUES ("?") ; ',(name))

        database.commit()

    except Exception as e:
        database.rollback()
        raise e
    
    finally:
        if database:
            database.close()

#procedimento que atualiza todos os dados da linha criada por database_create_row
def database_update_registro(filename, table, name, latitude, longitude, drainage_area,
                    data):
    
    database = None
    try:
        database  = sqlite3.connect(filename+'.s3db')
        cur  = database.cursor()
        
        cur.execute('UPDATE '+table+' SET latitude=?, longitude=?, area_drenagem=?, data=? '+
                    'WHERE nome = ? ;',
                    (latitude, longitude, drainage_area, data, name))
        database.commit()
        
    except Exception as e:
       database.rollback()
       raise e
    
    finally:
        if database:
            database.close()
            
#procedimento que atualiza um campo em particular
def database_update_field(filename, table, field, value, field_condition,
                          value_condition):
    
    database = None
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('UPDATE '+table+' SET '+field+' = ? WHERE '+
                    field_condition+' = ? ;', (value, value_condition))

        database.commit()
        
    except Exception as e:
        database.rollback()
        raise e
    
    finally:
        if database:
            database.close()

def select_field_value(filename, table, field, condition_field, condition_value):

    database = None
        
    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('SELECT '+field+' FROM '+table+' WHERE '+condition_field+' = "'+
                    condition_value+'" ;')

        data = cur.fetchone()[0]

        return  data

    except Exception as e:
        raise e
    
    finally:
        if database:
            database.close()

#seleciona uma coluna e pega todos os registros, usado na listbox
def select_field(filename, table, field):

    database = None

    try:
        database= sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('SELECT '+field+' FROM '+table+' ;')

        data = cur.fetchall()

        return data

    except Exception as e:
        raise e

    finally:
        if database:
            database.close()                

#        
def select_data(filename, table, condition_field, condition_value):

    database = None

    try:
        database = sqlite3.connect(filename+'.s3db')
        cur = database.cursor()

        cur.execute('SELECT * FROM '+table+' WHERE '+condition_field+
                    ' = "'+condition_value+'" ;')

        data = cur.fetchall()

        return data

    except Exception as e:
        raise e
    
    finally:
        if database:
            database.close()
